[INFO] cloning repository https://github.com/tense-i/tslink
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/tense-i/tslink" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftense-i%2Ftslink", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftense-i%2Ftslink'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] cd73fe10528d0572ddc8f0b54a47ea112cb5c93d
[INFO] checking tense-i/tslink against try#e622d8d7bed4f2668d446e06c6c1436ecae15796 for pr-156776
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftense-i%2Ftslink" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/tense-i/tslink
[INFO] removed 0 missing tests
[INFO] finished tweaking git repo https://github.com/tense-i/tslink
[INFO] tweaked toml for git repo https://github.com/tense-i/tslink written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/tense-i/tslink on toolchain e622d8d7bed4f2668d446e06c6c1436ecae15796
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+e622d8d7bed4f2668d446e06c6c1436ecae15796" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/tense-i/tslink already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+e622d8d7bed4f2668d446e06c6c1436ecae15796" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+e622d8d7bed4f2668d446e06c6c1436ecae15796" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 269c192562a08399cd2b798f19eba4b970959b2a70e4b60ab4febc73042f31b8
[INFO] running `Command { std: "docker" "start" "-a" "269c192562a08399cd2b798f19eba4b970959b2a70e4b60ab4febc73042f31b8", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "269c192562a08399cd2b798f19eba4b970959b2a70e4b60ab4febc73042f31b8", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "269c192562a08399cd2b798f19eba4b970959b2a70e4b60ab4febc73042f31b8", kill_on_drop: false }`
[INFO] [stdout] 269c192562a08399cd2b798f19eba4b970959b2a70e4b60ab4febc73042f31b8
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+e622d8d7bed4f2668d446e06c6c1436ecae15796" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 49f73d27360d57697a1ef3484b08e070b79b0e2c1af5b0d82f4a93625469baab
[INFO] running `Command { std: "docker" "start" "-a" "49f73d27360d57697a1ef3484b08e070b79b0e2c1af5b0d82f4a93625469baab", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.181
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling cc v1.2.55
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling const-oid v0.9.6
[INFO] [stderr]    Compiling once_cell v1.21.3
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]    Compiling libm v0.2.16
[INFO] [stderr]    Compiling litemap v0.8.1
[INFO] [stderr]    Compiling writeable v0.6.2
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]    Compiling base64ct v1.8.3
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]     Checking http v0.2.12
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling pem-rfc7468 v0.7.0
[INFO] [stderr]     Checking lazy_static v1.5.0
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling der v0.7.10
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling indexmap v1.9.3
[INFO] [stderr]     Checking http-body v0.4.6
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking socket2 v0.6.2
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking ahash v0.8.12
[INFO] [stderr]    Compiling spki v0.7.3
[INFO] [stderr]     Checking socket2 v0.5.10
[INFO] [stderr]     Checking tokio v1.49.0
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling pkcs8 v0.10.2
[INFO] [stderr]    Compiling num-iter v0.1.45
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling tinyvec v1.10.0
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling toml_parser v1.0.8+spec-1.1.0
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]     Checking serde_json v1.0.149
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]    Compiling axum-core v0.3.4
[INFO] [stderr]    Compiling pin-project-internal v1.1.10
[INFO] [stderr]    Compiling getrandom v0.4.1
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling iana-time-zone v0.1.65
[INFO] [stderr]    Compiling libz-sys v1.1.23
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]    Compiling chrono v0.4.43
[INFO] [stderr]    Compiling crc v3.4.0
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling toml_edit v0.23.10+spec-1.0.0
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling rustls v0.21.12
[INFO] [stderr]    Compiling crossbeam-queue v0.3.12
[INFO] [stderr]    Compiling unicode-normalization v0.1.25
[INFO] [stderr]     Checking pin-project v1.1.10
[INFO] [stderr]    Compiling hashlink v0.8.4
[INFO] [stderr]    Compiling const-random-macro v0.1.16
[INFO] [stderr]    Compiling pkcs1 v0.7.5
[INFO] [stderr]    Compiling sqlformat v0.2.6
[INFO] [stderr]    Compiling futures-intrusive v0.5.0
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]     Checking opentelemetry v0.21.0
[INFO] [stderr]    Compiling atoi v2.0.0
[INFO] [stderr]    Compiling signature v2.2.0
[INFO] [stderr]     Checking tokio-stream v0.1.18
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]    Compiling rustls-webpki v0.101.7
[INFO] [stderr]    Compiling sct v0.7.1
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling anyhow v1.0.101
[INFO] [stderr]    Compiling num-bigint-dig v0.8.6
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]    Compiling axum v0.6.20
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]    Compiling linux-raw-sys v0.11.0
[INFO] [stderr]     Checking h2 v0.3.27
[INFO] [stderr]    Compiling unicode-properties v0.1.4
[INFO] [stderr]    Compiling uuid v1.20.0
[INFO] [stderr]    Compiling prost-derive v0.11.9
[INFO] [stderr]     Checking tower v0.4.13
[INFO] [stderr]    Compiling stringprep v0.1.5
[INFO] [stderr]    Compiling hkdf v0.12.4
[INFO] [stderr]     Checking tokio-io-timeout v1.2.1
[INFO] [stderr]     Checking const-random v0.1.18
[INFO] [stderr]    Compiling proc-macro-crate v3.4.0
[INFO] [stderr]    Compiling md-5 v0.10.6
[INFO] [stderr]    Compiling cmake v0.1.57
[INFO] [stderr]    Compiling rsa v0.9.10
[INFO] [stderr]     Checking ordered-float v4.6.0
[INFO] [stderr]     Checking concurrent-queue v2.5.0
[INFO] [stderr]     Checking glob v0.3.3
[INFO] [stderr]    Compiling whoami v1.6.1
[INFO] [stderr]    Compiling crc16 v0.4.0
[INFO] [stderr]     Checking regex-syntax v0.8.9
[INFO] [stderr]    Compiling rustls v0.22.4
[INFO] [stderr]     Checking opentelemetry_sdk v0.21.2
[INFO] [stderr]     Checking event-listener v5.4.1
[INFO] [stderr]    Compiling num_enum_derive v0.7.5
[INFO] [stderr]    Compiling rdkafka-sys v4.10.0+2.12.1
[INFO] [stderr]     Checking prost v0.11.9
[INFO] [stderr]     Checking dlv-list v0.5.2
[INFO] [stderr]     Checking rustls-webpki v0.102.8
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking http-body-util v0.1.3
[INFO] [stderr]    Compiling tempfile v3.25.0
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]     Checking data-encoding v2.10.0
[INFO] [stderr]    Compiling protobuf v2.28.0
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking hyper v1.8.1
[INFO] [stderr]     Checking tungstenite v0.24.0
[INFO] [stderr]     Checking num_enum v0.7.5
[INFO] [stderr]     Checking ordered-multimap v0.7.3
[INFO] [stderr]     Checking event-listener-strategy v0.5.4
[INFO] [stderr]     Checking bytes-utils v0.1.4
[INFO] [stderr]     Checking tracing-serde v0.2.0
[INFO] [stderr]     Checking rustls-pemfile v2.2.0
[INFO] [stderr]     Checking sharded-slab v0.1.7
[INFO] [stderr]     Checking encoding_rs v0.8.35
[INFO] [stderr]    Compiling sqlx-core v0.7.4
[INFO] [stderr]     Checking arraydeque v0.5.1
[INFO] [stderr]    Compiling prometheus v0.13.4
[INFO] [stderr]     Checking cookie-factory v0.3.2
[INFO] [stderr]     Checking rustls-native-certs v0.7.3
[INFO] [stderr]     Checking convert_case v0.6.0
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking hyper v0.14.32
[INFO] [stderr]     Checking tokio-tungstenite v0.24.0
[INFO] [stderr]     Checking redis-protocol v5.0.1
[INFO] [stderr]     Checking rust-ini v0.20.0
[INFO] [stderr]     Checking async-lock v3.4.2
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking json5 v0.4.1
[INFO] [stderr]     Checking axum-core v0.4.5
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking opentelemetry-semantic-conventions v0.13.0
[INFO] [stderr]     Checking ron v0.8.1
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking serde_path_to_error v0.1.20
[INFO] [stderr]     Checking flume v0.11.1
[INFO] [stderr]     Checking float-cmp v0.9.0
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking arc-swap v1.8.1
[INFO] [stderr]     Checking crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling fred-macros v0.1.0
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]    Compiling axum-macros v0.4.2
[INFO] [stderr]     Checking tracing-subscriber v0.3.22
[INFO] [stderr]     Checking tagptr v0.2.0
[INFO] [stderr]     Checking pathdiff v0.2.3
[INFO] [stderr]     Checking semver v1.0.27
[INFO] [stderr]     Checking tower-http v0.5.2
[INFO] [stderr]     Checking dashmap v5.5.3
[INFO] [stderr]     Checking tokio-test v0.4.5
[INFO] [stderr]     Checking yaml-rust2 v0.8.1
[INFO] [stderr]     Checking moka v0.12.13
[INFO] [stderr]     Checking fred v9.4.0
[INFO] [stderr]     Checking config v0.14.1
[INFO] [stderr]     Checking tokio-rustls v0.25.0
[INFO] [stderr]     Checking rumqttc v0.24.0
[INFO] [stderr]     Checking tracing-opentelemetry v0.22.0
[INFO] [stderr]     Checking axum v0.7.9
[INFO] [stderr]    Compiling sqlx-mysql v0.7.4
[INFO] [stderr]     Checking hyper-timeout v0.4.1
[INFO] [stderr]    Compiling sqlx-macros-core v0.7.4
[INFO] [stderr]    Compiling sqlx-macros v0.7.4
[INFO] [stderr]     Checking sqlx v0.7.4
[INFO] [stderr]     Checking rdkafka v0.36.2
[INFO] [stderr]     Checking tonic v0.9.2
[INFO] [stderr]     Checking opentelemetry-proto v0.4.0
[INFO] [stderr]     Checking opentelemetry-otlp v0.14.0
[INFO] [stderr]     Checking tslink v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `put`
[INFO] [stdout]  --> src/infrastructure/http/routes.rs:1:40
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::routing::{delete, get, post, put};
[INFO] [stdout]   |                                        ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `put`
[INFO] [stdout]  --> src/infrastructure/http/routes.rs:1:40
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::routing::{delete, get, post, put};
[INFO] [stdout]   |                                        ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `put`
[INFO] [stdout]  --> src/infrastructure/http/routes.rs:1:40
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::routing::{delete, get, post, put};
[INFO] [stdout]   |                                        ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `put`
[INFO] [stdout]  --> src/infrastructure/http/routes.rs:1:40
[INFO] [stdout]   |
[INFO] [stdout] 1 | use axum::routing::{delete, get, post, put};
[INFO] [stdout]   |                                        ^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle_device_offline` and `get_device_status` are never used
[INFO] [stdout]    --> src/application/device_service.rs:63:18
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl DeviceService {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  63 |     pub async fn handle_device_offline(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub async fn get_device_status(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `with_cache_ttl` and `refresh_all_caches` are never used
[INFO] [stdout]    --> src/application/discovery_service.rs:56:12
[INFO] [stdout]     |
[INFO] [stdout]  46 | impl DiscoveryService {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn with_cache_ttl(mut self, ttl: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub async fn refresh_all_caches(&self) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `EventReport` is never constructed
[INFO] [stdout]   --> src/application/event_bus.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum DeviceEvent {
[INFO] [stdout]    |          ----------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 34 |     EventReport {
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeviceEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `event_report` is never used
[INFO] [stdout]   --> src/application/event_bus.rs:97:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl DeviceEvent {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 97 |     pub fn event_report(
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_by_identifier` is never used
[INFO] [stdout]   --> src/application/function_param_service.rs:28:18
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl FunctionParamService {
[INFO] [stdout]    | ------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub async fn get_by_identifier(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `check_link`, `get_links`, `set_active_link`, `remove_link`, and `cleanup_device_links` are never used
[INFO] [stdout]    --> src/application/link_service.rs:28:18
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl LinkService {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  28 |     pub async fn check_link(
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub async fn get_links(&self, product_key: &str, device_id: &str) -> Result<Vec<Link>> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub async fn set_active_link(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub async fn remove_link(
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub async fn cleanup_device_links(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `publisher` is never read
[INFO] [stdout]   --> src/application/shadow_service.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct ShadowService {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     publisher: Arc<MessagePublisher>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `replay_shadow_on_online` is never used
[INFO] [stdout]   --> src/application/shadow_service.rs:92:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl ShadowService {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub async fn replay_shadow_on_online(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_properties` and `model_repo` are never used
[INFO] [stdout]    --> src/application/thing_service.rs:172:18
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl ThingService {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub async fn set_properties(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn model_repo(&self) -> &Arc<ModelRepository> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_topic_prefix` is never used
[INFO] [stdout]    --> src/config.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn default_topic_prefix() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_event_topic` is never used
[INFO] [stdout]    --> src/config.rs:116:4
[INFO] [stdout]     |
[INFO] [stdout] 116 | fn default_event_topic() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_property_topic` is never used
[INFO] [stdout]    --> src/config.rs:119:4
[INFO] [stdout]     |
[INFO] [stdout] 119 | fn default_property_topic() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_max_connections` is never used
[INFO] [stdout]    --> src/config.rs:122:4
[INFO] [stdout]     |
[INFO] [stdout] 122 | fn default_max_connections() -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_min_connections` is never used
[INFO] [stdout]    --> src/config.rs:125:4
[INFO] [stdout]     |
[INFO] [stdout] 125 | fn default_min_connections() -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_connect_timeout` is never used
[INFO] [stdout]    --> src/config.rs:128:4
[INFO] [stdout]     |
[INFO] [stdout] 128 | fn default_connect_timeout() -> u64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_http_host` is never used
[INFO] [stdout]    --> src/config.rs:131:4
[INFO] [stdout]     |
[INFO] [stdout] 131 | fn default_http_host() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_request_timeout` is never used
[INFO] [stdout]    --> src/config.rs:137:4
[INFO] [stdout]     |
[INFO] [stdout] 137 | fn default_request_timeout() -> u64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultilinkMethodConfig` is never constructed
[INFO] [stdout]   --> src/domain/link.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct MultilinkMethodConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultilinkWeightConfig` is never constructed
[INFO] [stdout]   --> src/domain/link.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct MultilinkWeightConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated constant `ERROR` is never used
[INFO] [stdout]   --> src/domain/message.rs:93:15
[INFO] [stdout]    |
[INFO] [stdout] 90 | impl ResponseCode {
[INFO] [stdout]    | ----------------- associated constant in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub const ERROR: &'static str = "0";
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/domain/message.rs:102:12
[INFO] [stdout]     |
[INFO] [stdout] 100 | impl<T> CommonTopicReceiver<T> {
[INFO] [stdout]     | ------------------------------ associated function in this implementation
[INFO] [stdout] 101 |     /// Create a new receiver message with data.
[INFO] [stdout] 102 |     pub fn new(data: T) -> Self
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `error` is never used
[INFO] [stdout]    --> src/domain/message.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 121 | impl<T> CommonTopicResponse<T> {
[INFO] [stdout]     | ------------------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn error(receiver: &CommonTopicReceiver<impl std::fmt::Debug>, data: T, msg: &str) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ShadowServiceProperty` is never constructed
[INFO] [stdout]   --> src/domain/shadow.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct ShadowServiceProperty {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DeviceModelType` is never used
[INFO] [stdout]   --> src/domain/thing_model.rs:21:10
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub enum DeviceModelType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_event` is never used
[INFO] [stdout]    --> src/domain/thing_model.rs:115:12
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl DeviceModel {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn get_event(&self, identifier: &str) -> Option<&FunctionMethod> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PlatformMessageType` is never used
[INFO] [stdout]   --> src/domain/topic.rs:80:10
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub enum PlatformMessageType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AppMessageType` is never used
[INFO] [stdout]   --> src/domain/topic.rs:92:10
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub enum AppMessageType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BASIC_PRE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:105:15
[INFO] [stdout]     |
[INFO] [stdout] 105 |     pub const BASIC_PRE: &str = "sys/";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REGION_PRE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:106:15
[INFO] [stdout]     |
[INFO] [stdout] 106 |     pub const REGION_PRE: &str = "region/";
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REPLY_SUF` is never used
[INFO] [stdout]    --> src/domain/topic.rs:107:15
[INFO] [stdout]     |
[INFO] [stdout] 107 |     pub const REPLY_SUF: &str = "_reply";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SERVICE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:108:15
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub const SERVICE: &str = "/service";
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EVENT` is never used
[INFO] [stdout]    --> src/domain/topic.rs:109:15
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub const EVENT: &str = "/event";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PROPERTIES` is never used
[INFO] [stdout]    --> src/domain/topic.rs:110:15
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub const PROPERTIES: &str = "/properties";
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PROPERTY` is never used
[INFO] [stdout]    --> src/domain/topic.rs:111:15
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub const PROPERTY: &str = "/property";
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `THING` is never used
[INFO] [stdout]    --> src/domain/topic.rs:112:15
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub const THING: &str = "thing";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLATFORM` is never used
[INFO] [stdout]    --> src/domain/topic.rs:113:15
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub const PLATFORM: &str = "platform";
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `APP` is never used
[INFO] [stdout]    --> src/domain/topic.rs:114:15
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub const APP: &str = "app";
[INFO] [stdout]     |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEVICE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:115:15
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub const DEVICE: &str = "/device";
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MODEL` is never used
[INFO] [stdout]    --> src/domain/topic.rs:116:15
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub const MODEL: &str = "/model";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CONFIG` is never used
[INFO] [stdout]    --> src/domain/topic.rs:117:15
[INFO] [stdout]     |
[INFO] [stdout] 117 |     pub const CONFIG: &str = "/config";
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POST` is never used
[INFO] [stdout]    --> src/domain/topic.rs:118:15
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub const POST: &str = "/post";
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SET` is never used
[INFO] [stdout]    --> src/domain/topic.rs:119:15
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub const SET: &str = "/set";
[INFO] [stdout]     |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REQUEST` is never used
[INFO] [stdout]    --> src/domain/topic.rs:120:15
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub const REQUEST: &str = "/request";
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REGISTER` is never used
[INFO] [stdout]    --> src/domain/topic.rs:121:15
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub const REGISTER: &str = "/register";
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DYNAMIC_REGISTER` is never used
[INFO] [stdout]    --> src/domain/topic.rs:122:15
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub const DYNAMIC_REGISTER: &str = "/dynamic_register";
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NTP` is never used
[INFO] [stdout]    --> src/domain/topic.rs:123:15
[INFO] [stdout]     |
[INFO] [stdout] 123 |     pub const NTP: &str = "/ntp";
[INFO] [stdout]     |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PONG` is never used
[INFO] [stdout]    --> src/domain/topic.rs:124:15
[INFO] [stdout]     |
[INFO] [stdout] 124 |     pub const PONG: &str = "/pong";
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UPDATE_TOPO` is never used
[INFO] [stdout]    --> src/domain/topic.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub const UPDATE_TOPO: &str = "/update_topo";
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STATE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:126:15
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub const STATE: &str = "/state";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INFO` is never used
[INFO] [stdout]    --> src/domain/topic.rs:127:15
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub const INFO: &str = "info";
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WARNING` is never used
[INFO] [stdout]    --> src/domain/topic.rs:128:15
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub const WARNING: &str = "warning";
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ERROR` is never used
[INFO] [stdout]    --> src/domain/topic.rs:129:15
[INFO] [stdout]     |
[INFO] [stdout] 129 |     pub const ERROR: &str = "error";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `AuthFailed` is never constructed
[INFO] [stdout]   --> src/error.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum TsLinkError {
[INFO] [stdout]    |          ----------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 43 |     AuthFailed { reason: String },
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TsLinkError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `invalidate` is never used
[INFO] [stdout]   --> src/infrastructure/database/model_repo.rs:54:18
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl ModelRepository {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub async fn invalidate(&self, product_key: &str) {
[INFO] [stdout]    |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `find_shadow_services` is never used
[INFO] [stdout]   --> src/infrastructure/database/shadow_repo.rs:18:18
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl ShadowRepository {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub async fn find_shadow_services(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `subscribe`, `publish`, and `publish_retained` are never used
[INFO] [stdout]   --> src/infrastructure/mqtt/client.rs:63:18
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl MqttClient {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub async fn subscribe(&self, topic: &str, qos: QoS) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub async fn publish(&self, topic: &str, payload: Vec<u8>) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub async fn publish_retained(&self, topic: &str, payload: Vec<u8>) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `publish_raw` is never used
[INFO] [stdout]   --> src/infrastructure/mqtt/publisher.rs:45:18
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl MessagePublisher {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub async fn publish_raw(&self, topic: &str, payload: Vec<u8>) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_offline` and `get_status` are never used
[INFO] [stdout]   --> src/infrastructure/redis/device_state.rs:46:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl DeviceStateRedis {
[INFO] [stdout]    | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub async fn set_offline(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub async fn get_status(
[INFO] [stdout]    |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `update_link_weight`, `get_links`, `set_active_link`, `remove_link`, `delete_device_links`, and `increment_link_weight` are never used
[INFO] [stdout]    --> src/infrastructure/redis/link.rs:40:18
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl LinkRedis {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  40 |     pub async fn update_link_weight(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub async fn get_links(&self, product_key: &str, device_id: &str) -> Result<Vec<Link>> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub async fn set_active_link(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub async fn remove_link(
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub async fn delete_device_links(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub async fn increment_link_weight(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `delete` is never used
[INFO] [stdout]   --> src/infrastructure/redis/shadow.rs:98:18
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl ShadowRedis {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub async fn delete(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `mqtt_message_latency_seconds`, `redis_operation_duration_seconds`, and `mqtt_connections` are never read
[INFO] [stdout]   --> src/telemetry.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct Metrics {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub mqtt_message_latency_seconds: HistogramVec,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub redis_operation_duration_seconds: HistogramVec,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     /// Gauge: active MQTT connections
[INFO] [stdout] 21 |     pub mqtt_connections: IntGaugeVec,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Metrics` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `shutdown_otel` is never used
[INFO] [stdout]    --> src/telemetry.rs:182:8
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub fn shutdown_otel() {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `handle_device_offline` and `get_device_status` are never used
[INFO] [stdout]    --> src/application/device_service.rs:63:18
[INFO] [stdout]     |
[INFO] [stdout]  23 | impl DeviceService {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  63 |     pub async fn handle_device_offline(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 223 |     pub async fn get_device_status(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `with_cache_ttl` and `refresh_all_caches` are never used
[INFO] [stdout]    --> src/application/discovery_service.rs:56:12
[INFO] [stdout]     |
[INFO] [stdout]  46 | impl DiscoveryService {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn with_cache_ttl(mut self, ttl: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub async fn refresh_all_caches(&self) -> Result<usize> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Offline` and `EventReport` are never constructed
[INFO] [stdout]   --> src/application/event_bus.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum DeviceEvent {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 21 |     Offline {
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     EventReport {
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DeviceEvent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `offline` and `event_report` are never used
[INFO] [stdout]   --> src/application/event_bus.rs:76:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl DeviceEvent {
[INFO] [stdout]    | ---------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn offline(product_key: impl Into<String>, device_id: impl Into<String>) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 97 |     pub fn event_report(
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_by_identifier` is never used
[INFO] [stdout]   --> src/application/function_param_service.rs:28:18
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl FunctionParamService {
[INFO] [stdout]    | ------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub async fn get_by_identifier(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WEIGHT_INCREMENT` is never used
[INFO] [stdout]  --> src/application/link_service.rs:9:7
[INFO] [stdout]   |
[INFO] [stdout] 9 | const WEIGHT_INCREMENT: f64 = 1.0;
[INFO] [stdout]   |       ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `check_link`, `get_links`, `set_active_link`, `remove_link`, and `cleanup_device_links` are never used
[INFO] [stdout]    --> src/application/link_service.rs:28:18
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl LinkService {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  28 |     pub async fn check_link(
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub async fn get_links(&self, product_key: &str, device_id: &str) -> Result<Vec<Link>> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub async fn set_active_link(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub async fn remove_link(
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub async fn cleanup_device_links(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `publisher` is never read
[INFO] [stdout]   --> src/application/shadow_service.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct ShadowService {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 19 |     publisher: Arc<MessagePublisher>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `replay_shadow_on_online` is never used
[INFO] [stdout]   --> src/application/shadow_service.rs:92:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl ShadowService {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub async fn replay_shadow_on_online(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_properties` and `model_repo` are never used
[INFO] [stdout]    --> src/application/thing_service.rs:172:18
[INFO] [stdout]     |
[INFO] [stdout]  30 | impl ThingService {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub async fn set_properties(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn model_repo(&self) -> &Arc<ModelRepository> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_online` is never used
[INFO] [stdout]    --> src/domain/device.rs:102:12
[INFO] [stdout]     |
[INFO] [stdout]  80 | impl Device {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn is_online(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/domain/device_config.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl DeviceConfig {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 23 |     pub fn new(product_key: String, device_id: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/domain/device_type.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl DeviceType {
[INFO] [stdout]    | --------------- associated function in this implementation
[INFO] [stdout] 21 |     pub fn new(code: String, name: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_specs`, and `with_required` are never used
[INFO] [stdout]   --> src/domain/function_param.rs:39:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl FunctionParam {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 39 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn with_specs(mut self, specs: String) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     pub fn with_required(mut self, required: bool) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DomainEvent` is never used
[INFO] [stdout]  --> src/domain/event.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum DomainEvent {
[INFO] [stdout]   |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `product_key`, `device_id`, and `event_type` are never used
[INFO] [stdout]   --> src/domain/event.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl DomainEvent {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 55 |     /// Get the product_key associated with this event.
[INFO] [stdout] 56 |     pub fn product_key(&self) -> &str {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn device_id(&self) -> &str {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn event_type(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LinkAccessStrategy` is never used
[INFO] [stdout]  --> src/domain/link.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub enum LinkAccessStrategy {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Link` is never constructed
[INFO] [stdout]   --> src/domain/link.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct Link {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultilinkMethodConfig` is never constructed
[INFO] [stdout]   --> src/domain/link.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct MultilinkMethodConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MultilinkWeightConfig` is never constructed
[INFO] [stdout]   --> src/domain/link.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct MultilinkWeightConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/domain/link.rs:69:12
[INFO] [stdout]    |
[INFO] [stdout] 67 | impl Link {
[INFO] [stdout]    | --------- associated function in this implementation
[INFO] [stdout] 68 |     /// Create a new link with default values.
[INFO] [stdout] 69 |     pub fn new(link_id: String, product_key: String, device_id: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServiceReply` is never constructed
[INFO] [stdout]   --> src/domain/message.rs:81:12
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub struct ServiceReply<T = serde_json::Value> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated constant `ERROR` is never used
[INFO] [stdout]   --> src/domain/message.rs:93:15
[INFO] [stdout]    |
[INFO] [stdout] 90 | impl ResponseCode {
[INFO] [stdout]    | ----------------- associated constant in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub const ERROR: &'static str = "0";
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]    --> src/domain/message.rs:102:12
[INFO] [stdout]     |
[INFO] [stdout] 100 | impl<T> CommonTopicReceiver<T> {
[INFO] [stdout]     | ------------------------------ associated function in this implementation
[INFO] [stdout] 101 |     /// Create a new receiver message with data.
[INFO] [stdout] 102 |     pub fn new(data: T) -> Self
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `error` is never used
[INFO] [stdout]    --> src/domain/message.rs:139:12
[INFO] [stdout]     |
[INFO] [stdout] 121 | impl<T> CommonTopicResponse<T> {
[INFO] [stdout]     | ------------------------------ associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn error(receiver: &CommonTopicReceiver<impl std::fmt::Debug>, data: T, msg: &str) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/domain/product_function.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl ProductFunction {
[INFO] [stdout]    | -------------------- associated function in this implementation
[INFO] [stdout] 27 |     pub fn new(identifier: String, method: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/domain/product.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl Product {
[INFO] [stdout]    | ------------ associated function in this implementation
[INFO] [stdout] 30 |     pub fn new(product_key: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DeviceShadow` is never constructed
[INFO] [stdout]  --> src/domain/shadow.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct DeviceShadow {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ShadowServiceConfig` is never constructed
[INFO] [stdout]   --> src/domain/shadow.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct ShadowServiceConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ShadowServiceProperty` is never constructed
[INFO] [stdout]   --> src/domain/shadow.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct ShadowServiceProperty {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `merge_properties` are never used
[INFO] [stdout]   --> src/domain/shadow.rs:45:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | impl DeviceShadow {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 44 |     /// Create a new empty shadow.
[INFO] [stdout] 45 |     pub fn new(product_key: String, device_id: String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn merge_properties(&mut self, new_props: &serde_json::Value) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DeviceModelType` is never used
[INFO] [stdout]   --> src/domain/thing_model.rs:21:10
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub enum DeviceModelType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_event` and `is_sync_service` are never used
[INFO] [stdout]    --> src/domain/thing_model.rs:115:12
[INFO] [stdout]     |
[INFO] [stdout] 108 | impl DeviceModel {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn get_event(&self, identifier: &str) -> Option<&FunctionMethod> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 120 |     pub fn is_sync_service(&self, method: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PlatformMessageType` is never used
[INFO] [stdout]   --> src/domain/topic.rs:80:10
[INFO] [stdout]    |
[INFO] [stdout] 80 | pub enum PlatformMessageType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AppMessageType` is never used
[INFO] [stdout]   --> src/domain/topic.rs:92:10
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub enum AppMessageType {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `raw_device_id` and `full_device_id` are never used
[INFO] [stdout]    --> src/domain/topic.rs:134:12
[INFO] [stdout]     |
[INFO] [stdout] 132 | impl TopicInfo {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] 133 |     /// Get the raw device ID without link suffix.
[INFO] [stdout] 134 |     pub fn raw_device_id(&self) -> &str {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn full_device_id(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BASIC_PRE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:105:15
[INFO] [stdout]     |
[INFO] [stdout] 105 |     pub const BASIC_PRE: &str = "sys/";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REGION_PRE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:106:15
[INFO] [stdout]     |
[INFO] [stdout] 106 |     pub const REGION_PRE: &str = "region/";
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REPLY_SUF` is never used
[INFO] [stdout]    --> src/domain/topic.rs:107:15
[INFO] [stdout]     |
[INFO] [stdout] 107 |     pub const REPLY_SUF: &str = "_reply";
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SERVICE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:108:15
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub const SERVICE: &str = "/service";
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EVENT` is never used
[INFO] [stdout]    --> src/domain/topic.rs:109:15
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub const EVENT: &str = "/event";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PROPERTIES` is never used
[INFO] [stdout]    --> src/domain/topic.rs:110:15
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub const PROPERTIES: &str = "/properties";
[INFO] [stdout]     |               ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PROPERTY` is never used
[INFO] [stdout]    --> src/domain/topic.rs:111:15
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub const PROPERTY: &str = "/property";
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `THING` is never used
[INFO] [stdout]    --> src/domain/topic.rs:112:15
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub const THING: &str = "thing";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PLATFORM` is never used
[INFO] [stdout]    --> src/domain/topic.rs:113:15
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub const PLATFORM: &str = "platform";
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `APP` is never used
[INFO] [stdout]    --> src/domain/topic.rs:114:15
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub const APP: &str = "app";
[INFO] [stdout]     |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEVICE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:115:15
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub const DEVICE: &str = "/device";
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MODEL` is never used
[INFO] [stdout]    --> src/domain/topic.rs:116:15
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub const MODEL: &str = "/model";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CONFIG` is never used
[INFO] [stdout]    --> src/domain/topic.rs:117:15
[INFO] [stdout]     |
[INFO] [stdout] 117 |     pub const CONFIG: &str = "/config";
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `POST` is never used
[INFO] [stdout]    --> src/domain/topic.rs:118:15
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub const POST: &str = "/post";
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SET` is never used
[INFO] [stdout]    --> src/domain/topic.rs:119:15
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub const SET: &str = "/set";
[INFO] [stdout]     |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REQUEST` is never used
[INFO] [stdout]    --> src/domain/topic.rs:120:15
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub const REQUEST: &str = "/request";
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `REGISTER` is never used
[INFO] [stdout]    --> src/domain/topic.rs:121:15
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub const REGISTER: &str = "/register";
[INFO] [stdout]     |               ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DYNAMIC_REGISTER` is never used
[INFO] [stdout]    --> src/domain/topic.rs:122:15
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub const DYNAMIC_REGISTER: &str = "/dynamic_register";
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NTP` is never used
[INFO] [stdout]    --> src/domain/topic.rs:123:15
[INFO] [stdout]     |
[INFO] [stdout] 123 |     pub const NTP: &str = "/ntp";
[INFO] [stdout]     |               ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PONG` is never used
[INFO] [stdout]    --> src/domain/topic.rs:124:15
[INFO] [stdout]     |
[INFO] [stdout] 124 |     pub const PONG: &str = "/pong";
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `UPDATE_TOPO` is never used
[INFO] [stdout]    --> src/domain/topic.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub const UPDATE_TOPO: &str = "/update_topo";
[INFO] [stdout]     |               ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STATE` is never used
[INFO] [stdout]    --> src/domain/topic.rs:126:15
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub const STATE: &str = "/state";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INFO` is never used
[INFO] [stdout]    --> src/domain/topic.rs:127:15
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub const INFO: &str = "info";
[INFO] [stdout]     |               ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WARNING` is never used
[INFO] [stdout]    --> src/domain/topic.rs:128:15
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub const WARNING: &str = "warning";
[INFO] [stdout]     |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ERROR` is never used
[INFO] [stdout]    --> src/domain/topic.rs:129:15
[INFO] [stdout]     |
[INFO] [stdout] 129 |     pub const ERROR: &str = "error";
[INFO] [stdout]     |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `DeviceNotFound` and `AuthFailed` are never constructed
[INFO] [stdout]   --> src/error.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum TsLinkError {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 37 |     DeviceNotFound {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     AuthFailed { reason: String },
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TsLinkError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `invalidate` is never used
[INFO] [stdout]   --> src/infrastructure/database/model_repo.rs:54:18
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl ModelRepository {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub async fn invalidate(&self, product_key: &str) {
[INFO] [stdout]    |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `find_shadow_services` is never used
[INFO] [stdout]   --> src/infrastructure/database/shadow_repo.rs:18:18
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl ShadowRepository {
[INFO] [stdout]    | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub async fn find_shadow_services(
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `subscribe`, `publish`, and `publish_retained` are never used
[INFO] [stdout]   --> src/infrastructure/mqtt/client.rs:63:18
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl MqttClient {
[INFO] [stdout]    | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub async fn subscribe(&self, topic: &str, qos: QoS) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 72 |     pub async fn publish(&self, topic: &str, payload: Vec<u8>) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub async fn publish_retained(&self, topic: &str, payload: Vec<u8>) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NoopHandler` is never constructed
[INFO] [stdout]   --> src/infrastructure/mqtt/handler.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct NoopHandler {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new` and `all` are never used
[INFO] [stdout]   --> src/infrastructure/mqtt/handler.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl NoopHandler {
[INFO] [stdout]    | ---------------- associated functions in this implementation
[INFO] [stdout] 30 |     pub fn new(types: Vec<ThingMessageType>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn all() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `publish_raw` and `pending_count` are never used
[INFO] [stdout]    --> src/infrastructure/mqtt/publisher.rs:45:18
[INFO] [stdout]     |
[INFO] [stdout]  21 | impl MessagePublisher {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub async fn publish_raw(&self, topic: &str, payload: Vec<u8>) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn pending_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_offline` and `get_status` are never used
[INFO] [stdout]   --> src/infrastructure/redis/device_state.rs:46:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl DeviceStateRedis {
[INFO] [stdout]    | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub async fn set_offline(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub async fn get_status(
[INFO] [stdout]    |                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `update_link_weight`, `get_links`, `set_active_link`, `remove_link`, `delete_device_links`, and `increment_link_weight` are never used
[INFO] [stdout]    --> src/infrastructure/redis/link.rs:40:18
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl LinkRedis {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  40 |     pub async fn update_link_weight(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub async fn get_links(&self, product_key: &str, device_id: &str) -> Result<Vec<Link>> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub async fn set_active_link(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub async fn remove_link(
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub async fn delete_device_links(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub async fn increment_link_weight(
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `delete` is never used
[INFO] [stdout]   --> src/infrastructure/redis/shadow.rs:98:18
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl ShadowRedis {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 98 |     pub async fn delete(&self, product_key: &str, device_id: &str) -> Result<()> {
[INFO] [stdout]    |                  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `mqtt_message_latency_seconds`, `device_online_count`, `redis_operation_duration_seconds`, and `mqtt_connections` are never read
[INFO] [stdout]   --> src/telemetry.rs:15:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct Metrics {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub mqtt_message_latency_seconds: HistogramVec,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     /// Gauge: current online device count
[INFO] [stdout] 17 |     pub device_online_count: IntGauge,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     /// Histogram: Redis operation duration in seconds, labels: [operation]
[INFO] [stdout] 19 |     pub redis_operation_duration_seconds: HistogramVec,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     /// Gauge: active MQTT connections
[INFO] [stdout] 21 |     pub mqtt_connections: IntGaugeVec,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Metrics` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `shutdown_otel` is never used
[INFO] [stdout]    --> src/telemetry.rs:182:8
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub fn shutdown_otel() {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 06s
[INFO] running `Command { std: "docker" "inspect" "49f73d27360d57697a1ef3484b08e070b79b0e2c1af5b0d82f4a93625469baab", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "49f73d27360d57697a1ef3484b08e070b79b0e2c1af5b0d82f4a93625469baab", kill_on_drop: false }`
[INFO] [stdout] 49f73d27360d57697a1ef3484b08e070b79b0e2c1af5b0d82f4a93625469baab
